package com.bjpowernode.task;

import com.bjpowernode.constant.DicEnum;
import com.bjpowernode.entity.TDicType;
import com.bjpowernode.entity.TProduct;
import com.bjpowernode.service.DicTypeService;
import com.bjpowernode.service.ProductService;
import jakarta.annotation.Resource;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.List;

import static com.bjpowernode.DlykServerApplication.cacheMap;

/**
 * 数据定时缓存任务类
 * 用于定时从数据库加载字典类型、产品等基础数据并缓存到内存中，确保缓存数据的实时性
 */
@Component
@EnableScheduling // 启用Spring定时任务功能，使@Scheduled注解生效
public class DataTask {
    /**
     * 字典类型服务接口
     * 用于查询系统字典类型及其关联的字典值列表
     */
    @Resource
    private DicTypeService dicTypeService;

    /**
     * 产品服务接口
     * 用于查询系统产品列表数据
     */
    @Resource
    private ProductService productService;

    /**
     * 定时缓存刷新任务
     * 每3秒执行一次，从数据库加载最新的字典类型和产品数据并更新到内存缓存
     * "0 0/5 * * * ?" 表示每分钟的第0秒开始，每5分钟执行一次
     */
    @Scheduled(cron = "0 0/5 * * * ?")
    public void task() {
        // 1. 查询所有字典类型及其关联的字典值列表
        List<TDicType> dicTypes = dicTypeService.getDicTypes();

        // 2. 将字典类型数据缓存到内存：key为字典类型编码，value为该类型下的字典值列表
        for (TDicType dicType : dicTypes) {
            cacheMap.put(dicType.getTypeCode(), dicType.getDicValueList());
        }

        // 3. 查询所有产品列表数据
        List<TProduct> products = productService.getProducts();

        // 4. 将产品列表缓存到内存：key为"意向产品"字典编码，value为产品列表
        cacheMap.put(DicEnum.INTENTION_PRODUCT.getCode(), products);
    }
}
